home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byt86jun.arc / MIDI.ARC / LIST6.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1980-01-01  |  1.8 KB  |  72 lines

  1.  
  2. { Return offset of MIDI key data in 
  3.   Track Event message, if present
  4. }
  5. function midi_key_offset(var eblk:track_event_block; 
  6.              chan:byte):integer;
  7. begin
  8. midi_key_offset:=ERR;  { default return value }
  9. with eblk do
  10.   begin
  11.   if ((event_type in [MIDI, MIDI_RS])
  12.     and (midi_cmnd(running_status) 
  13.       in [NOTE_OFF, NOTE_ON, AFTER_TOUCH_K])
  14.     and (midi_chan(running_status) = chan)) then
  15.       begin
  16.       midi_key_offset:=1;
  17.       if (event_type = MIDI_RS) then
  18.       midi_key_offset:=2;
  19.       end;
  20.   end; { with eblk }
  21. end;
  22.  
  23. { Return MIDI key data from Track Event, if present
  24. }
  25. function get_midi_key(var eblk:track_event_block; 
  26.               chan:byte):integer;
  27. var
  28.   key_offset : integer;
  29. begin
  30. get_midi_key:=ERR; { default return value }
  31. key_offset:=midi_key_offset(eblk,chan);
  32. if (key_offset <> ERR) then
  33.   get_midi_key:=eblk.event.mess[key_offset];
  34. end;
  35.  
  36. { Set MIDI key value in a Track Event, 
  37.   if Track Event is of appropriate type
  38. }
  39. procedure set_midi_key(var eblk:track_event_block; 
  40.                chan,key:byte);
  41. var
  42.   key_offset : integer;
  43. begin
  44. key_offset:=midi_key_offset(eblk,chan);
  45. if (key_offset <> ERR) then
  46.   eblk.event.mess[key_offset]:=key;
  47. end;
  48.  
  49. { Transpose all MIDI pitch (key) data 
  50.   for a channel in a Track Data block
  51. }
  52. procedure transpose_pitch(var tdi,tdo:track_data_block; 
  53.               chan,trans:integer);
  54. var
  55.   curr_key : integer;  { MIDI key value from 
  56.              current track event }
  57. begin
  58. reset_track_data(tdi);
  59. reset_track_data(tdo);
  60. while not(tdi.edat) do
  61.   begin
  62.   next_track_event(tdi);
  63.   curr_key:=get_midi_key(tdi.curr,chan);
  64.   if (curr_key <> ERR) then
  65.     set_midi_key(tdi.curr,chan,
  66.          midi_data_limit(curr_key+trans));
  67.   store_track_event(tdo,tdi.curr);
  68.   end;
  69. end;
  70.  
  71. en
  72.     set_midi_key(t